package cn.com.ninng;

/**
 * 给定一个整数数组 nums ，找到一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。
 * @author liulekang
 * @createdate 2021/7/29
 */
public class Problem53 {

    public static void main(String[] args) {
        System.out.println(maxSubArray(new int[]{-1}));
    }


    public static int maxSubArray(int[] nums) {
        if (nums == null){
            return 0;
        }
        int max = Integer.MIN_VALUE;
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            //对比当前元素的和是否大于之前的最大值
            max = max > sum ? max : sum;
            if (sum < 0){
                //如果之前的和加上当前值为负数了，则代表之前的元素都是无用的元素
                sum = 0;
            }
        }

        return max;
    }

}
